#include<bits/stdc++.h>
using namespace std;
struct node
{
    int d,v,a;
}c[100010];
int T,n,m,s,V,l,ans;
int main()
{
    freopen("detect.in","r",stdin);
    freopen("detect.out","w",stdout);
    scanf("%d",&T);
    while(T>0)
    {
        T--;
        memset(c,0,sizeof(c));
        ans=0;
        scanf("%d%d%d%d",&n,&m,&s,&V);
        for(int i=1;i<=n;i++)
            scanf("%d%d%d",&c[i].d,&c[i].v,&c[i].a);
        for(int i=1;i<=m;i++)
        {
            int x;
            scanf("%d",&x);
            if(i==m)l=x;
        }
        //printf("%d\n",l);
        for(int i=1;i<=n;i++)
        {
            if(c[i].a==0)
                if(c[i].v>V&&c[i].d<=l)
                {
                    ans++;
                    //printf("%d ",i);
                }
            if(c[i].a>0)
            {
                int ss=(V*V-c[i].v*c[i].v)/(c[i].a*2);
                if(c[i].d+ss<l)
                {
                    ans++;
                    //printf("%d ",i);
                }
            }
        }
        printf("%d %d\n",ans,m-1);
    }
    return 0;
}
/*
1
1 5 15 3
1 1 4
2 5 8 9 15
*/
